/*
* Copyright (c) 2020 - 2025 Renesas Electronics Corporation and/or its affiliates
*
* SPDX-License-Identifier: BSD-3-Clause
*/

/***********************************************************************************************************************
 * Includes   <System Includes> , "Project Includes"
 **********************************************************************************************************************/
#include "bsp_api.h"

#define BSP_PRV_CLUSTERPWRCTLR_PREQ_OFFSET    (4U)
#define BSP_PRV_CLUSTERPWRCTLR_PREQ_MASK      (0xFU)

/***********************************************************************************************************************
 * Typedef definitions
 **********************************************************************************************************************/

/***********************************************************************************************************************
 * Exported global variables (to be accessed by other files)
 **********************************************************************************************************************/

/***********************************************************************************************************************
 * Private global variables and functions
 **********************************************************************************************************************/

/*******************************************************************************************************************//**
 * @addtogroup BSP_MCU
 * @{
 **********************************************************************************************************************/

/*******************************************************************************************************************//**
 * @} (end addtogroup BSP_MCU)
 **********************************************************************************************************************/

/*******************************************************************************************************************//**
 * Powers on and off the L3 cache way.
 **********************************************************************************************************************/
void r_bsp_cache_l3_power_ctrl (void)
{
    uintptr_t clusterpwrctlr;
    uintptr_t clusterpwrctlr_preq;

    clusterpwrctlr      = __get_CLUSTERPWRCTLR();
    clusterpwrctlr_preq = (clusterpwrctlr & BSP_PRV_CLUSTERPWRCTLR_PREQ_MASK) >> BSP_PRV_CLUSTERPWRCTLR_PREQ_OFFSET;
    if (0 != clusterpwrctlr_preq)
    {
        clusterpwrctlr |= BSP_PRV_CLUSTERPWRCTLR_PREQ_MASK << BSP_PRV_CLUSTERPWRCTLR_PREQ_OFFSET;
    }
    else
    {
        clusterpwrctlr &= ~(BSP_PRV_CLUSTERPWRCTLR_PREQ_MASK << BSP_PRV_CLUSTERPWRCTLR_PREQ_OFFSET);
    }

    __set_CLUSTERPWRCTLR(clusterpwrctlr);

    __asm volatile ("ISB SY");
}
